% Ejercicio "XML"
\subsection*{\fbox{\theejercicio} - XML}

Para el intercambio de informaci\'on entre distintos sistemas de ense\~nanza se est\'an definiendo en la actualidad una serie de est\'andares. Muchos de estos est\'andares se basan en el lenguaje de marcado XML. Si bien el an\'alisis de este tipo de lenguajes se realiza mediante t\'ecnicas gen\'ericas, en este ejercicio se propone la realizaci\'on de un analizador espec\'{\i}fico para un est\'andar muy simplificado de intercambio de preguntas de test multiopci\'on. Un ejemplo de este lenguaje es el siguiente fichero:

\verb@<PREGUNTA>@                                                \\
\verb@        <ENUNCIADO>@                                       \\
\verb@                @{\tt ?`Cu\'al es la capital de Espa\~na?} \\
\verb@        </ENUNCIADO>@                                      \\
\verb@        <REPUESTA CORRECTA>@                               \\
\verb@                Madrid@                                    \\
\verb@        </REPUESTA>@                                       \\
\verb@        <RESPUESTA INCORRECTA>@                            \\
\verb@                Nueva York@                                \\
\verb@        </REPUESTA>@                                       \\
\verb@        <RESPUESTA INCORRECTA>@                            \\
\verb@                Lisboa@                                    \\
\verb@        </REPUESTA>@                                       \\
\verb@</PREGUNTA>@                                               \\
\verb@<PREGUNTA>@                                                \\
\verb@        ...@                                               \\
\verb@</PREGUNTA>@                                               \\

Tanto el enunciado como las respuestas correctas o incorrectas pueden aparecer en cualquier orden dentro de la pregunta. El n\'umero de posibles respuestas a cada pregunta es variable.

\smallskip

Se pide:

\begin{enumerate}[1)]
\item Dise\~nar una gram\'atica y escribir mediante LEX y YACC un analizador sint\'actico para este lenguaje concreto, que sea capaz de leer ficheros de este tipo y efectuar las correspondientes llamadas a las rutinas de programa, que se encargan de crear las estructuras de datos correspondientes dentro de un sistema de test, que son:

\begin{verbatim}
int crearPregunta();
/* Crea una pregunta y devuelve un numero, correspondiente a un
   identificador interno */

void insertarEnunciado(int id_pregunta, char* enunciado);
/* inserta o modifica el enunciado de la pregunta asociada a
   id_pregunta */

void insertarRespuestaCorrecta(int id_pregunta, char* texto);
/* inserta o modifica el texto de la respuesta correcta asociada a
   id_pregunta */

void insertarRespuestaIncorrecta(int id_pregunta, char* texto);
/* inserta o modifica el texto correspondiente a una de las posibles
   respuestas incorrectas asociada a id_pregunta */
\end{verbatim}

Siguiendo con el ejemplo anterior, la secuencia de llamadas podr\'{\i}a ser la siguiente (no es la \'unica soluci\'on posible):

\verb@    crearPregunta(); /*...supongamos que devuelve el valor 817...*/@             \\
\verb@    insertarEnunciado(817, "@{\tt ?`Cu\'al es la capital de Espa\~na?}\verb@");@ \\
\verb@    insertarRespuestaCorrecta(817,"Madrid");@                                    \\
\verb@    insertarPreguntaIncorrecta(817,"Nueva York");@                               \\
\verb@    insertarPreguntaIncorrecta(817,"Lisboa");@                                   \\

\item Incorporar el c\'odigo necesario para comprobar que cada pregunta incluye un \'unico enunciado, una sola respuesta correcta y al menos una respuesta incorrecta.
\end{enumerate}

% Solución del ejercicio
\subsubsection*{SOLUCI\'ON}

